﻿//-----------------------------------------------------------------------
// <copyright file="IModelTransform.cs" company="tuliprules.org">
//     Copyright (c) 2010 tuplelister, tuliprules.org.
// </copyright>
// <summary>This is the IModelTransform interface.</summary>
//-----------------------------------------------------------------------

namespace Tulip.Rules
{
    /// <summary>
    /// Represents a model transform.
    /// </summary>
    /// <typeparam name="T">
    /// The type of the root node of the model to which a ruel set is transformed.
    /// </typeparam>
    /// <remarks>
    /// A model transform is responsible for transformation of a rule set model into a Tulip model.
    /// </remarks>
    public interface IModelTransform<out T>
    {
        /// <summary>
        /// Performs a tranform on the rule set and returns a Tulip model.
        /// </summary>
        /// <param name="ruleSet">The rule set to be transformed.</param>
        /// <returns>
        /// A tulip model.
        /// </returns>
        T Transform(RuleSet ruleSet);
    }
}
